package org.discala

/**
 * The scope trait defines the basic contract for different scope implementations.
 * A scope is an object that takes a provider the generates a new instance of an object
 * and returns a new provider that manages the lifecycle of that object. The default
 * scope implementations provided with the framework are: {@link org.discala.scopes.Prototype} and
 * {@link sorg.discala.copes.Singleton}.
 * <p>
 * The prototype scope always returns the exact provider that was passed to it, thus ensuring
 * that each use creates a brand new instance.
 * <p>
 * The singleton scope only generates a new instance on the first call to the provider,
 * returning the previously created instance for all further invocations.
 * <p>
 * For full details of each scope implementation please see that scaladoc for that scope object.
 *
 * @author Chris Turner
 */
trait Scope